#define _CRT_SECURE_NO_WARNINGS 1
//#define ROWS 3
//#define COLS 3
//#include<stdio.h>


//(1)时间复杂度是O(N)方法
//void search_num(int(*pf)[3][3],int num) {
//    //为了说明二维数组的使用
//    //for (int i = 0; i < 3; i++) {
//    //    for (int j = 0; j < 3; j++) {
//    //        printf("%d", (*pf)[i][j]);//二维数组指针就是这样的形式进行输出的
//    //        printf("%d", *(*((*pf) +i)) + j);//第一次解引用代表拿到了二维数组的首元素的地址（二维数组的数组名）      第二次解引用代表拿到了一位数组的首元素的地址（一维数组的数组名）     
//    //        //对一维数组的数组名进行解引用就是访问一维数组中的变量了
//    //        printf("\n");//二维数组的数组名依然是首元素的地址，但是二维数组的首元素是一维数组
//    //    }
//    //}
//
//
//
//
//    //真正的代码
//    for (int i=0,j=0; i < ROWS, j <=COLS; j++) {//因为要求时间复杂度是小于O(N)的    此处函数只能手动的停止，并不会出现自动停止的现象
//        if (j == COLS) {//达到了一维数组的边界
//            i++;
//            j = 0;
//        }
//
//        if (i == ROWS) {//二维数组所有的元素都进行过检索了
//            printf("%d不在此数组中", num);
//            break;
//        }
//
//        if ((*pf)[i][j] == num) {
//            printf("%d在此数组中", num);
//            break;
//        }
//
//        if ((*pf)[i][0] > num) {//出现有一行的最小值是大于此数的就可以停止了
//            printf("%d不在此数组中", num);
//            break;
//        }
//    }
//}






//时间复杂度小于O(N)的方法          这个方法和上面的方法是一样的，但是时间复杂度就是不一样
//void search_num(int(*pf)[3][3], int num) {
//    int i = 0;//这个是代表行
//    int j = COLS - 1;//这个代表的是列
//    while (i < ROWS && j >= 0) {//因为是从矩阵的右上角开始的，一直往左进行，
//        if ((*pf)[i][j] == num) {
//            printf("%d在数组中", num);
//            return;;
//        }
//
//        if ((*pf)[i][j] > num) {//因为再往下面是增加的，所以只能往左边
//            j--;//只有这种可能，最上面的数字大了，下面的都是递增的
//        }
//
//        if ((*pf)[i][j] < num) {
//            i++;//前面的都是小的，只有下面的是增大的
//        }
//    }
//    printf("%d不在数组中", num);
//}
//
//
//int main(void){
//    int matrix[ROWS][COLS] = {
//    {1, 2, 3},
//    {4, 5, 6},
//    {7, 8, 9}
//    };
//
//    int num = 16;
//
//    search_num(&matrix,num);
//
//}